<template>
	<view class="content" v-if="info">
		 <status-bar title='支付明细' :hideBg="hideBg"  :back="back"></status-bar>
		 <view class="Info">
		 	<image :src="$imgUrls(site_time.img)" mode="aspectFill" class="Logo"></image>
			<view class="Info_box">
				<text class="black bold size28">{{site_time.name}}</text>
				<text class="InfoTime">购买时间:{{info.add_time}}</text>
				<text class="InfoTime">开宴时间:{{site_time.open_date_time}}</text>
				<text class="countDown">剩余支付时间：{{minutes}}:{{seconds}}</text>
			</view>
		 </view>
		 
		 <view class="seatInfo">
			
			 <view class="row j-sb a-center">
				 <view class="d-flex a-center">
					 <text class="seat_one">座席</text>
					 <text class="seat_two">信息</text>
				 </view>
				 <text class="color_33 h6">已选 {{info.sites_detail.length}} 位</text>
			 </view>
			 
			 <view class="seatList" v-for="(item,index) in info.sites_detail" :key="index">
				 <view class="seatName">{{item.type_name}}.{{item.name}}</view>
				 <view class="panBoX">
					 <view class="panlist" :class="{'Active':item.goods_id == subItem.goods_id}"   
					       v-for="(subItem,subIndex) in item.goods" :key="subIndex"
					       @click.stop="selectSeat(index,subItem)">
						 <image :src="$imgUrls(subItem.img)" mode="aspectFill" class="panImg"></image>
						 <text class="panTxt">{{subItem.name}}</text>
						 <view class="select">
							 <view class="iconfont icon-xuanzhong h7 bold"></view>
						 </view>
					 </view>
				 </view>
			 </view>
			 
			 
			 <view class="row j-sb a-center m-top20">
				 <view class="flex-1 d-flex a-center">
					 <text class="h6">席位预估价</text>
					 <text class="color_ab5 h6">(实际支付金额以现场结算为准)</text>
				 </view>
				 <text class="forecastPrice">￥{{info.forecast_price}}</text>
			 </view>
			 
			 <view class="rows black size26 m-top20" v-if="pageData.child_tips">{{pageData.child_tips}}</view>
		 </view>
		 
		 
		 <view class="assembly" v-if="make_up.length">
			 <view class="row j-sb a-center">
				 <view class="d-flex a-center">
					 <view class="d-flex a-center">
						 <text class="seat_one">妆造</text>
						 <text class="seat_two">预约</text>
					 </view>
					<text class="color_33 h6 m-left20">已选({{pageData.make_up_num}}/{{pageData.choose_limit}})</text>
				 </view>
				 <text class="color_33 h6">当前余位:{{pageData.available_make_up_num}}/{{pageData.total_make_up_num}}</text>
			 </view>
			 
			 <view class="intro color_ab5" v-if="pageData.make_up_desc">{{pageData.make_up_desc}}</view>
			 
			 <view class="seletTime">
				 <view class="timeList" :class="{'timeActive':index == make_up_index}" 
				     v-for="(item,index) in make_up" :key="index"
					 @click.stop="make_up_index = index">{{item.time}}</view>
			 </view>
			 <view class="row m-top20" v-if="make_up.length">
				 <view class="whenList" 
				      :class="{'Active':seletmake.indexOf(item.id) != -1}" 
				      @click.stop="selectMack(item.id,item.state)" 
				     v-for="(item,index) in make_up[make_up_index].list" :key="item.id">
					 <text class="whenTxt">{{item.state == 1?'无法预约':'当前空闲'}}</text>
					 <view class="select">
					 	<view class="iconfont h7 bold" :class="item.state == 1?'icon-guanbi2':'icon-xuanzhong'"></view>
					 </view>
				 </view>
				
			 </view>
			 
		 </view>
		 
		 
		 
		 <view class="footer">
			 <view class="foot">
				 <view class="row a-center j-sb">
					 <text class="black size28  bold">预约联系人</text>
					 <input type="text" class="Input" v-model="user_name" placeholder-class="place" placeholder="请填写联系人"/>
					 <input type="number" class="Input" v-model="user_tel" placeholder-class="place" placeholder="请填写联系电话"/>
					<!-- <view class="getPhone">
						 <button class="login_btn"
						      open-type="getPhoneNumber"
						 	@getphonenumber="getPhoneNumber">
						</button>
						 <view class="iconfont icon-iconzhengli_shouji black size40"></view>
					 </view> -->
				 </view>
				 <view class="botend">
					 <view class="d-flex f-column">
						 <view class="d-flex a-center color_ab5 bold">
							 <text class="h6 m-top6">定金</text>
							 <text class="size26 m-top6">￥</text>
							 <text class="size36">{{info.payment}}</text>
						 </view>
						 <view class="d-flex a-center m-top10" @click="agree = !agree">
							 <view class="Bot" :class="{'botActive':agree}">
								 <view class="iconfont icon-xuanzhong white h6"></view>
							 </view>
							 <text class="color_99 h6 m-left6" >我已阅读并同意</text>
							 <text class="agree" @click.stop="toUrl(`article?id=${pageData.article_id}`)">《取消预定协议》</text>
						 </view>
					 </view>
					 
					 
					 <view class="continum" @click.stop="continum">确认支付</view>
					 
				 </view>
				 
			 </view>
		 </view>
	</view>
</template>

<script>
	import {mapState} from 'vuex';
	export default {
		data() {
			return {
				order_id:'',
				pageData:'',
				site_time:'',
				info:'',
				timer:null,
				diffTime:0,
				minutes:'',
				seconds:'',
				goods:[],
				make_up:[],
				seletmake:[],
				make_up_index:0,
				
				user_name:'',
				user_tel:'',
			    agree:false,
				hideBg:true,
			}
		},
		onLoad(opt) {
			 this.diffTime = 0;
			clearInterval(this.timer);
			this.timer = null;  
			if(opt.order_id) this.order_id = opt.order_id;
			this.getLockOrder();
		},
		
		onShow() {
			
			// #ifdef MP-WEIXIN
			let that = this;
			let options = wx.getEnterOptionsSync();
			if(options.scene == '1038' && options.referrerInfo.appId=='wxef277996acc166c3'){
				let extraData = options.referrerInfo.extraData;
				if(!extraData) return;
				if(extraData.code == 'success'){
					clearInterval(that.timer);
					that.timer = null;  
					uni.redirectTo({
						url:'/Reserve/Makelist',
						complete() {
							if(that.timer){
								clearInterval(that.timer);
								that.timer = null;  
							}
						}
					})
	
				}
			}
			// #endif
		},
		methods: {
			getLockOrder(){
				let sites_choose = [];
				if(this.info){
					for (let i = 0; i < this.info.sites_detail.length; i++) {
						let item = this.info.sites_detail[i];
						let obj = {
							id:item.id,
							goods_id:item.goods_id,
							make_up_id:item.make_up_id
						}
						sites_choose.push(obj)
					}
				}
				this.$http.get({
					url:'/SiteApi/getLockOrder',
					data:{
						order_id:this.order_id,
						sites_choose:sites_choose.length?JSON.stringify(sites_choose):'',
					}
				}).then(res=>{
					if(res.code != 200) return this.$Toast(res.msg,2);
					const Result = res.data;
					this.pageData = Result;
					if(Result.site_time) this.site_time = Result.site_time;
					if(Result.info){
						Result.info.sites_detail.forEach(item=>{
							item.goods = Result.goods
						})
					}
					this.info = Result.info;
					if(Result.goods) this.goods = Result.goods;
					if(Result.make_up) this.make_up = Result.make_up;
					if(Result.member_info) {
						this.user_name = Result.member_info.v_name;
						this.user_tel = Result.member_info.v_tel;
					}
					if(this.diffTime > 0) return;
					if(Result.info.diffTime){
						this.diffTime = Number(Result.info.diffTime);
						this.diffCountdown();
					}else if(Result.info.expire_time){
						this.startCountdown(Result.info.expire_time);
					}
					
				})
			},
			
			
			
			
			continum(){
				let that = this;
				const regex = /^1[3456789]\d{9}$/; 
				let sites_choose = []
				for (let i = 0; i < this.info.sites_detail.length; i++) {
					let item = this.info.sites_detail[i];
					if(item.goods_id == 0 || !item.goods_id) return this.$Toast('请选择珍馐/套餐')
					let obj = {
						id:item.id,
						goods_id:item.goods_id,
						make_up_id:item.make_up_id
					}
					sites_choose.push(obj)
				}
				if(!this.user_name) return this.$Toast('请填写联系人');
				if(!this.user_tel) return this.$Toast('请填写联系人手机号码');
				if(!regex.test(this.user_tel)) return this.$Toast('手机号码有误');
				if(!this.agree) return this.$Toast('未同意协议');
				this.$showLoading('');
				clearInterval(that.timer);
				that.timer = null; 
				this.$http.get({
					url:'/SiteApi/payLockOrder',
					data:{
						order_id:this.order_id,
						sites_choose:JSON.stringify(sites_choose),
						user_name:this.user_name,
						user_tel:this.user_tel
					}
				}).then(res=>{
					this.$hideLoading();
					if(res.code != '100') return this.$Toast(res.msg);
					const Result = res.data;
					// #ifdef MP-WEIXIN
					if(Result.extraData){
						wx.openEmbeddedMiniProgram({
							appId:Result.appId,
							extraData:Result.extraData
						 });
						 return; 
					}
					uni.getProvider({
						service: 'oauth',
						success: function (resp) {
							console.log(resp.provider)
							if (resp.provider) {
								uni.requestPayment({
									provider:resp.provider[0],
									orderInfo: Result,
									timeStamp: Result.timeStamp,
									nonceStr: Result.nonceStr,
									package: Result.package,
									signType: Result.signType,
									paySign: Result.paySign,
									success:function (resj) {
										
										uni.redirectTo({
											url:'/Reserve/Makelist',
											complete() {
												console.log('200');
												if(that.timer){
													clearInterval(that.timer);
													that.timer = null; 
												}
												
											}
										})
									},
									fail: function (err) {
										console.log('fail:' + JSON.stringify(err));
									}
								})
							}
						}
					})
					// #endif
				})
			},
			
			
			selectSeat(index,subItem){
				this.info.sites_detail[index].goods_id = subItem.goods_id;
				this.getLockOrder()
			},
			
			selectMack(make_up_id,state){
				if(state == 1) return;
				const Flag = this.seletmake.some(n=>n == make_up_id);
				if(Flag){
					const Index = this.seletmake.findIndex(n=>n == make_up_id);
					this.seletmake.splice(Index,1);
				}else{
					if(this.seletmake.length == this.info.sites_detail.length) return this.$Toast(`最多选择${this.info.sites_detail.length}位`);
					this.seletmake.push(make_up_id);
				}
				
				this.pageData.make_up_num = this.seletmake.length;
				for (let i = 0; i < this.info.sites_detail.length; i++) {
					if(this.seletmake.length > i){
						this.info.sites_detail[i].make_up_id = this.seletmake[i];
					}else{
						this.info.sites_detail[i].make_up_id = 0;
					}
				}
			
				this.getLockOrder();
			},
			
			
			
			diffCountdown(){
				let that = this;
				if(this.timer){
					clearInterval(this.timer);
					this.timer = null;  
				}
				that.timer = setInterval(()=>{
					if(that.diffTime > 0){
						that.diffTime --;
					}else{
						clearInterval(that.timer);
						that.$Toast('支付超时,请重新选座',2);
						return;
					}
					// console.log(that.diffTime,'that.diffTime');
					let minutes = Math.floor(that.diffTime / 60) >=10?Math.floor(that.diffTime / 60):'0'+ Math.floor(that.diffTime / 60);  
					let seconds = Math.floor(that.diffTime % 60)>=10?Math.floor(that.diffTime % 60):'0'+Math.floor(that.diffTime % 60);  
					that.minutes = minutes;
					that.seconds = seconds;
				},1000)
			},
			
			startCountdown(expire_time){
				let that = this;
				if(this.timer){
					clearInterval(this.timer);
					this.timer = null;  
				}
				that.timer = setInterval(()=>{
					let now = Date.now();
					let diff = (Number(expire_time) * 1000) - now; 
					console.log(diff,'diff');
					if(diff <= 0) {
						clearInterval(that.timer);
						that.$Toast('支付超时,请重新选座',2);
						return;
					} 
					let remainingSeconds = Math.floor(diff / 1000);  
					let hours = Math.floor(remainingSeconds / 3600);  
					let minutes = Math.floor((remainingSeconds % 3600) / 60) >=10?Math.floor((remainingSeconds % 3600) / 60):'0'+Math.floor((remainingSeconds % 3600) / 60);  
					let seconds = remainingSeconds % 60 >= 10? remainingSeconds % 60:'0'+remainingSeconds % 60;  
					that.minutes = minutes;
					that.seconds = seconds;
				},1000)
			},
			
			
			async getPhoneNumber(e) {
				let result = e.detail;
				if (result.errMsg != 'getPhoneNumber:ok') return this.$Toast('未认证')
				const jscode = await this.getProvider();
				this.$showLoading('');
				this.$http.post({
					url: '/zzj_singleSaleApi/appletDecodePhone',
					data: {
						encryptedData: result.encryptedData,
						iv: result.iv,
						session_key: this.session_key,
						js_code:jscode
					}
				}).then(res => {
					this.$hideLoading();
					if (res.code != 200) return this.$Toast(res.msg);
					this.user_tel = res.data;
				})
			},
			
			
			getProvider() {
				return new Promise((resolve,reject)=>{
					uni.getProvider({
						service: 'oauth',
						success: (res) => {
							uni.login({
								provider: res.provider[0],
								success: (req) => {
					                resolve(req.code)
								}
							})
						}
					})
				})
			},
			
		},
		
		computed:{
			...mapState(['session_key']),
			
		},
		onPageScroll(e) {
			this.hideBg = e.scrollTop < 50
		},
		onUnload() {
			clearInterval(this.timer);
			this.timer = null; 
		}
		
	}
</script>

<style lang="scss" scoped>
    page{
		background-color: #f5ecda;
	}
	.content{
		padding-bottom: 200rpx;
	}
	.Info{
		width:690rpx;
		margin:0 auto;
		display: flex;
	}
	.Logo{
		width:120rpx;
		height: 120rpx;
		border-radius: 10rpx;
		margin-right:20rpx;
	}
	.Info_box{
		flex:1;
		display: flex;
		flex-direction: column;
	}
	.InfoTime{
		color:#9f9994;
		font-size:22rpx;
		margin-top:8rpx;
	}
	.countDown{
		color:#a74743;
		font-size:30rpx;
		font-weight: bold;
		margin-top:8rpx;
	}
	.seatInfo{
		width:690rpx;
		margin:30rpx auto 0 auto;
		background-color: #fefbf6;
		border-radius: 10rpx;
		padding:20rpx 20rpx 30rpx 20rpx;
		
	}
	.seatList{
		width:100%;
	}
	.seatName{
		background-color: #eae0d1;
		height:60rpx;
		line-height: 60rpx;
		padding:0 24rpx;
		color:#84704c;
		font-size:28rpx;
		display: inline-block;
		border-radius: 4rpx;
		margin-top:24rpx;
	}
	.seat_one{
		color:#977e52;
		font-size:34rpx;
		font-weight: bold;
	}
	.seat_two{
		color:#000;
		font-size:34rpx;
		font-weight: bold;
	}
	.forecastPrice{
		color:#ab504c;
		font-size:30rpx;
	}
	.panBoX{
		width:100%;
		display: flex;
	}
	.panlist{
		display: flex;
		flex-direction: column;
		align-items: center;
		margin-top:20rpx;
		margin-right:24rpx;
		background-color: #fefcf1;
		box-shadow: 0 0 10rpx #ccc;
		border-radius: 10rpx;
		overflow: hidden;
		padding-bottom: 10rpx;
	}
	.panImg{
		width:120rpx;
		height: 120rpx;
	}
	.panTxt{
		color:#aa9c81;
		font-size:22rpx;
		padding:6rpx 0;
	}
	.select{
		width:34rpx;
		height: 34rpx;
		background-color: #ded8c5;
		border-radius: 50%;
		text-align: center;
		display: flex;
		justify-content: center;
		align-items: center;
		
	}
	.icon-xuanzhong{
		color:#8d7c59;
	}
	.icon-guanbi2{
		color:#333;
		padding-top:4rpx;
	}
	.Active .select{
		background-color: #e0bb71;
	}
	.Active .icon-xuanzhong{
		color:#fff;
	}
	
	.assembly{
		width:690rpx;
		margin:24rpx auto 0 auto;
		background-color: #fefbf6;
		border-radius: 10rpx;
		padding:20rpx 20rpx 30rpx 20rpx;
	}
	.intro{
		width:100%;
		margin-top:20rpx;
		font-size: 24rpx;
	}
	.seletTime{
		width:100%;
		display: flex;
		justify-content: space-between;
		flex-wrap: wrap;
	}
	.timeList{
		width:314rpx;
		height: 70rpx;
		background-color: #f2eae7;
		border-radius: 10rpx;
		padding:0 20rpx;
		display: flex;
		align-items: center;
		margin-top:30rpx;
		font-size:28rpx;
		color:#000;
		border:2rpx solid #f2eae7;
	}
	.timeActive{
		background-color: #fff;
		border:2rpx solid #ecdab3;
	}
	.whenList{
		width:200rpx;
		height: 60rpx;
		background-color: #fefcf1;
		border:1rpx solid #ecdab3;
		border-radius: 10rpx;
		padding:10rpx;
		display: flex;
		align-items: center;
		justify-content: space-between;
		margin-right:20rpx;
		margin-bottom: 20rpx;
	}
	.whenTxt{
		color:#aa9c81;
		font-size:24rpx;
	}
	.whenList:nth-child(3n){
		margin-right: 0 !important;
	}
	.footer{
		width:100%;
		background-color: #fff;
		position: fixed;
		bottom: 0;
		left:0;
		z-index:100;
	}
	.foot{
		width:100%;
		padding:24rpx 30rpx 30rpx 30rpx;
		display: flex;
		flex-direction: column;
	}
	.Input{
		width:250rpx;
		height: 60rpx;
		border:2rpx solid #ebd5a7;
		border-radius: 10rpx;
		font-size:26rpx;
		padding:0 10rpx 0rpx 20rpx;
		color: #000;
	}
	.place{
		color:#ebd5a7;
	}
	.getPhone{
		width:60rpx;
		height: 60rpx;
		border-radius: 50%;
		background-color: #e0bb71;
		display: flex;
		justify-content: center;
		align-items: center;
		position: relative;
	}
	.login_btn{
		width:100%;
		height: 100%;
		position: absolute;
		left:0;
		top:0;
		z-index:2;
		background-color: transparent;
		border:none;
	}
	.login_btn::before{
		background-color: transparent;
		border:none;
	}
	.botend{
		width:100%;
		margin-top:20rpx;
		display: flex;
		align-items: center;
		justify-content: space-between;
	}
	.Bot{
		width:30rpx;
		height: 30rpx;
		border:1px solid #999;
		border-radius: 50%;
		display: flex;
		justify-content: center;
		align-items: center;
	}
	.botActive{
		border:1px solid #e0bb71;
		background-color: #e0bb71;
	}
	.agree{
		color:#e0bb71;
	}
	.continum{
		width:200rpx;
		height: 80rpx;
		background-color: #e0bb71;
		display: flex;
		justify-content: center;
		align-items: center;
		font-size:30rpx;
		color:#333;
		font-weight: bold;
		border-radius: 10rpx;
	}
</style>
